www.gusucode.com > VC 2D游戏编辑器-源码程序 > VC 2D游戏编辑器-源码程序/code/game_Source/GameLib/magic/magic.cpp
//Download by http://www.NewXing.com #include "magic.h" #include "..\\globle_func.h" #include "..\\globle.h" CMagic::CMagic(char *szMagicFile) { FILE *file=fopen(szMagicFile,"rb"); if(!file) { MsgBox("不能打开物品文件!%s",szMagicFile); return; } fread(&MagicHeader, sizeof(_MagicHeader), 1, file); Magic = new _Magic[MagicHeader.nMagicN]; fread(Magic, MagicHeader.nMagicN*sizeof(_Magic), 1, file); fclose(file); } CMagic::~CMagic( ) { PA_SAFE_DELETE(Magic); } bool CMagic::UseMagic(ROLE* role, int type, int id) { switch(type) { case 0: case 9: role->health += Magic[id].wHealthSelf; if(role->health > role->MaxHealth) role->health = role->MaxHealth; else if(role->health < 0) { role->health -= Magic[id].wHealthSelf; return false; } role->energy += Magic[id].wEnergySelf; if(role->energy > role->MaxEnergy) role->energy = role->MaxEnergy; else if(role->energy < 0) { role->energy -= Magic[id].wEnergySelf; return false; } role->vigor += Magic[id].wVigorSelf; if(role->vigor > role->MaxVigor) role->vigor = role->MaxVigor; else if(role->vigor < 0) { role->vigor -= Magic[id].wVigorSelf; return false; } role->Bmoney += Magic[id].wMoneySelf; if(role->Bmoney < 0) { role->Bmoney -= Magic[id].wMoneySelf; return false; } return true; case 1: case 2: case 3: case 4: case 5: case 6: return false; } return false; } bool CMagic::UseMagic(int iOwner, int type, int id) { switch(type) { case 0: case 9: Zoetic->ZoeticLink[iOwner].health += (WORD)Magic[id].wHealthSelf; if(Zoetic->ZoeticLink[iOwner].health & 0x8000) { Zoetic->ZoeticLink[iOwner].health -= (WORD)Magic[id].wHealthSelf; return false; } else if(Zoetic->ZoeticLink[iOwner].health > Zoetic->ZoeticLink[iOwner].MaxHealth) Zoetic->ZoeticLink[iOwner].health = Zoetic->ZoeticLink[iOwner].MaxHealth; Zoetic->ZoeticLink[iOwner].energy += (WORD)Magic[id].wEnergySelf; if(Zoetic->ZoeticLink[iOwner].energy & 0x8000) { Zoetic->ZoeticLink[iOwner].energy -= (WORD)Magic[id].wEnergySelf; return false; } else if(Zoetic->ZoeticLink[iOwner].energy > Zoetic->ZoeticLink[iOwner].MaxEnergy) Zoetic->ZoeticLink[iOwner].energy = Zoetic->ZoeticLink[iOwner].MaxEnergy; Zoetic->ZoeticLink[iOwner].vigor += (WORD)Magic[id].wVigorSelf; if(Zoetic->ZoeticLink[iOwner].vigor & 0x8000) { Zoetic->ZoeticLink[iOwner].vigor -= (WORD)Magic[id].wVigorSelf; return false; } else if(Zoetic->ZoeticLink[iOwner].vigor > Zoetic->ZoeticLink[iOwner].MaxVigor) Zoetic->ZoeticLink[iOwner].vigor = Zoetic->ZoeticLink[iOwner].MaxVigor; Zoetic->ZoeticLink[iOwner].Bmoney += (WORD)Magic[id].wMoneySelf; if(Zoetic->ZoeticLink[iOwner].Bmoney & 0x8000) { Zoetic->ZoeticLink[iOwner].Bmoney -= (WORD)Magic[id].wMoneySelf; return false; } return true; case 1: case 2: case 3: case 4: case 5: case 6: return false; } return false; } void CMagic::AttackMagic(ROLE* role, int type, MagicIsUsing * magic_Link) { int id = magic_Link->id; switch(type) { case 0: case 9: if((int)Magic[id].wHealth < 0) { if(magic_Link->owner == TMain) role->health += (((int)Magic[id].wHealth - role->attack)<<7)/(role->defend+128); else role->health += (((int)Magic[id].wHealth - Zoetic->ZoeticLink[id].attack)<<7)/(role->defend+128); } else role->health += Magic[id].wHealth; if(role->health > role->MaxHealth) role->health = role->MaxHealth; else if(role->health < 0) role->health = 0; role->energy += Magic[id].wEnergy; if(role->energy > role->MaxEnergy) role->energy = role->MaxEnergy; else if(role->energy < 0) role->energy = 0; role->vigor += Magic[id].wVigor; if(role->vigor > role->MaxVigor) role->vigor = role->MaxVigor; else if(role->vigor < 0) role->vigor = 0; role->v += Magic[id].wSpeed; if(role->v < 0) role->v = 0; role->speed += Magic[id].wSpeed; if(role->speed < 0) role->speed = 0; role->defend += Magic[id].wDefend; if(role->defend < 0) role->defend = 0; role->attack += Magic[id].wAttack; if(role->attack < 0) role->attack = 0; role->agility += Magic[id].wSpeed; if(role->agility < 0) role->agility = 0; role->Bmoney += Magic[id].wMoney; if(role->Bmoney < 0) role->Bmoney = 0; break; } } void CMagic::AttackMagic(int iOwner, int type, MagicIsUsing * magic_Link) { int id = magic_Link->id; switch(type) { case 0: case 9: if((int)Magic[id].wHealth < 0) { if(magic_Link->owner == TMain) Zoetic->ZoeticLink[iOwner].health += (((int)Magic[id].wHealth - role->attack)<<7)/(Zoetic->ZoeticLink[iOwner].defend+128); else Zoetic->ZoeticLink[iOwner].health += (((int)Magic[id].wHealth - Zoetic->ZoeticLink[id].attack)<<7)/(Zoetic->ZoeticLink[iOwner].defend+128); } else Zoetic->ZoeticLink[iOwner].health += (WORD)Magic[id].wHealth; if(Zoetic->ZoeticLink[iOwner].health & 0x8000) Zoetic->ZoeticLink[iOwner].health = 0; else if(Zoetic->ZoeticLink[iOwner].health > Zoetic->ZoeticLink[iOwner].MaxHealth) Zoetic->ZoeticLink[iOwner].health = Zoetic->ZoeticLink[iOwner].MaxHealth; Zoetic->ZoeticLink[iOwner].energy += (WORD)Magic[id].wEnergy; if(Zoetic->ZoeticLink[iOwner].energy & 0x8000) Zoetic->ZoeticLink[iOwner].energy = 0; else if(Zoetic->ZoeticLink[iOwner].energy > Zoetic->ZoeticLink[iOwner].MaxEnergy) Zoetic->ZoeticLink[iOwner].energy = Zoetic->ZoeticLink[iOwner].MaxEnergy; Zoetic->ZoeticLink[iOwner].vigor += (WORD)Magic[id].wVigor; if(Zoetic->ZoeticLink[iOwner].vigor & 0x8000) Zoetic->ZoeticLink[iOwner].vigor = 0; else if(Zoetic->ZoeticLink[iOwner].vigor > Zoetic->ZoeticLink[iOwner].MaxVigor) Zoetic->ZoeticLink[iOwner].vigor = Zoetic->ZoeticLink[iOwner].MaxVigor; Zoetic->ZoeticLink[iOwner].v += (WORD)Magic[id].wSpeed; if(Zoetic->ZoeticLink[iOwner].v & 0x8000) Zoetic->ZoeticLink[iOwner].v = 0; Zoetic->ZoeticLink[iOwner].speed += (WORD)Magic[id].wSpeed; if(Zoetic->ZoeticLink[iOwner].speed & 0x8000) Zoetic->ZoeticLink[iOwner].speed = 0; Zoetic->ZoeticLink[iOwner].defend += (WORD)Magic[id].wDefend; if(Zoetic->ZoeticLink[iOwner].defend & 0x8000) Zoetic->ZoeticLink[iOwner].defend = 0; Zoetic->ZoeticLink[iOwner].attack += (WORD)Magic[id].wAttack; if(Zoetic->ZoeticLink[iOwner].attack & 0x8000) Zoetic->ZoeticLink[iOwner].attack = 0; Zoetic->ZoeticLink[iOwner].agility += (WORD)Magic[id].wSpeed; if(Zoetic->ZoeticLink[iOwner].agility & 0x8000) Zoetic->ZoeticLink[iOwner].agility = 0; Zoetic->ZoeticLink[iOwner].Bmoney += (WORD)Magic[id].wMoney; if(Zoetic->ZoeticLink[iOwner].Bmoney & 0x8000) Zoetic->ZoeticLink[iOwner].Bmoney = 0; break; } }